package org.jypj.dev.service.impl;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;

import org.jypj.dev.util.StringUtil;
import org.springframework.stereotype.Service;
import org.jypj.dev.model.Template;
import org.jypj.dev.dao.ITemplateDao;
import org.jypj.dev.service.ITemplateService;
import org.jypj.dev.util.Page;

@Service("templateService")
public class TemplateServiceImpl implements ITemplateService {

    @Resource
    private ITemplateDao templateDao;


    /**
     * 保存
     * 所有字段全都保存
     *
     * @param template
     * @return 保存后的对象包括ID
     */
    public int saveTemplate(Template template) {
        if (StringUtil.isEmpty(template.getId())) {
            String uuid = UUID.randomUUID().toString().replace("-", "").trim();
            template.setId(uuid);
        }
        int maxSortOrder = templateDao.getMaxSortOrder();
        template.setSortOrder(maxSortOrder+1);
        template.setNum("-");
        return templateDao.saveTemplate(template);
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteTemplateById(String id) {

        return templateDao.deleteTemplateById(id);
    }

    /**
     * 根据对象删除
     *
     * @param template
     * @return
     */
    public int deleteTemplateByObject(Template template) {

        return templateDao.deleteTemplateByObject(template);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param template
     * @return 保存后的对象包括ID
     */
    public int updateTemplate(Template template) {

        return templateDao.updateTemplate(template);
    }

    @Override
    public int updateTemplateSome(Template template) {


        return templateDao.updateTemplateSome(template);
    }

    /**
     * 按ID查询
     *
     * @return Template
     * @parm id 主键ID
     */
    public Template selectTemplateById(String id) {

        return templateDao.selectTemplateById(id);
    }

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<Template>
     */
    public Page selectOnePageByMap(Page page, Map<String, Object> map) {
        List<Template> templates = templateDao.selectOnePageByMap(page, map);
        if (templates != null && templates.size() > 0) {
            page.setResult(templates);
        } else {
            page.setResult(new ArrayList<Template>());
        }
        return page;
    }

    /**
     * 分页查询 包含对象条件
     *
     * @param page     分页对象
     * @param template 查询条件
     * @return Page
     */
    public Page selectOnePageByTemplate(Page page, Template template) {
        List<Template> templates = templateDao.selectOnePageByTemplate(page, template);
        if (templates != null && templates.size() > 0) {
            page.setResult(templates);
        } else {
            page.setResult(new ArrayList<Template>());
        }
        return page;
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Template>
     */
    public List<Template> selectAllByMap(Map<String, Object> map) {
        return templateDao.selectAllByMap(map);
    }


    /**
     * 按条件查询全部的
     *
     * @param template 查询条件
     * @return List<Template>
     */
    public List<Template> selectAllByTemplate(Template template) {

        return templateDao.selectAllByTemplate(template);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return Template
     */
    public Template selectObjectByMap(Map<String, Object> map) {

        return templateDao.selectObjectByMap(map);
    }

    /**
     * 按条件查询单个对象
     *
     * @param template 查询条件
     * @return Template
     */
    public Template selectObjectByTemplate(Template template) {

        return templateDao.selectObjectByTemplate(template);
    }

    @Override
    public int moveTemplate(String id1, String id2) {
        Template template1 = templateDao.selectTemplateById(id1);
        Template template2 = templateDao.selectTemplateById(id2);
        int sortOrder1 = template1.getSortOrder();
        int sortOrder2 = template2.getSortOrder();
        template1.setSortOrder(sortOrder2);
        template2.setSortOrder(sortOrder1);
        templateDao.updateTemplate(template1);
        templateDao.updateTemplate(template2);
        return 0;
    }
}